import { request } from "../../utils/request"

Page({

  /**
   * 页面的初始数据
   */
  data: {
    addressList: [], //地址列表
    page: 1, //当前页
    pageSize: 8, //每页记录数
    totalPage: 0, //页数
    addressIndex: 0 //跳转页面的方式 0是从订单页跳转 1是从“我的”收货地址跳转
  },

  /**
   * 处理微信一键添加地址事件
   */
  handlerWxAddressAdd() {
    wx.chooseAddress({
      success: (res) => {
        //组装省市区街道名地标，进行默认地址保存
        const formData = {
          name: res.userName,
          phone: res.telNumber,
          province: res.provinceName, //省份
          city: res.cityName, //城市
          district: res.countyName, //地区
          town: res.streetName, //街道
          landmark: res.detailInfo, //地标
          isDefault: "0" //默认地址 0不选中，1选中
        }
        const { token } = wx.getStorageSync("user")
        //如果用户选择的微信地址没有街道信息，那么就先根据用户的地址获取街道信息，然后再做新增操作
        if (!res.streetName) {
          const address = res.provinceName + res.cityName + res.countyName + res.detailInfo
          request({ url: `/address/getUserLocationByCityInfo?address=${address}`, method: "GET", header: { "Authorization": token } }).then(res => {
            if (res.data.state === 0) {
              formData.town = res.data.data.town
              //新增地址
              this.insertAddress(token, formData)
            }
          })
        } else {
          //有街道地址直接新增
          this.insertAddress(token, formData)
        }
      }
    })
  },

  /**
   * 微信一键新增收货地址
   */
  insertAddress(token, formData) {
    request({ url: "/address/insert/", method: "POST", data: formData, header: { "Authorization": token } }).then(res => {
      if (res.data.state === 0) {
        //添加成功后，将页面的数据进行刷新
        const addressList = this.data.addressList
        addressList.push(formData)
        this.setData({
          addressList
        })
      }
    })
  },

  /**
   * 处理手动添加地址事件
   */
  handlerManualAddressAdd() {
    //跳转到地址选择页
    wx.navigateTo({
      url: "/pages/addAddress/addAddress"
    })
  },

  /**
   * 分页加载用户的收货地址列表
   */
  async loadAddressList() {
    //如果数据已经是最后一页了，则不再加载数据
    if (this.data.totalPage !== 0 && this.data.totalPage - this.data.page < 0) {
      return
    }
    const { token } = wx.getStorageSync("user")
    const res = await request({ url: `/address/list?page=${this.data.page}&pageSize=${this.data.pageSize}`, method: "GET", data: this.data.formData, header: { "Authorization": token } })
    if (res.data.state === 0) {
      const dataList = res.data.data.list
      //如果有数据，追加到之前的数组中
      if (dataList && dataList.length > 0) {
        const addressList = this.data.addressList.concat(dataList)
        this.setData({
          addressList: addressList,
          page: this.data.page + 1,
          totalPage: res.data.data.totalPage
        })
      }
    }
  },

  /**
   * 处理默认收货地址事件
   */
  async handlerDefaultAddress(e) {
    //获取当前需要处理的地址id
    const addressId = e.currentTarget.dataset.id
    //发起请求修改默认状态
    const { token } = wx.getStorageSync("user")
    const res = await request({ url: `/address/updateDefault/${addressId}`, method: "POST", data: this.data.formData, header: { "Authorization": token } })
    if (res.data.state === 0) {
      //修改成功，获取当前复选框的值状态，如果有值，就是选中操作，反之是取消操作
      const checked = !e.currentTarget.dataset.checked ? "1" : "0"
      const addressList = this.data.addressList
      const index = addressList.findIndex(v => v.id === addressId)
      addressList[index].isDefault = checked
      //如果是选中操作，那么还要把之前有的默认地址改为非默认地址
      if (checked === "1") {
        addressList.map(v => {
          if (v.id !== addressId && v.isDefault === checked) {
            v.isDefault = "0"
          }
        })
      }
      //设置数据
      this.setData({
        addressList
      })
    } else {
      wx.showToast({ title: res.data.message, icon: "none" });
    }
  },

  /**
   * 处理地址删除事件
   */
  handlerDelete(e) {
    const addressId = e.currentTarget.dataset.id
    wx.showModal({
      title: "温馨提示",
      content: "确定要从删除此地址吗？",
      success: async res => {
        if (res.confirm) {
          const { token } = wx.getStorageSync("user")
          const res = await request({ url: `/address/delete/${addressId}`, method: "POST", header: { "Authorization": token } })
          if (res.data.state === 0) {
            const addressList = this.data.addressList
            const index = addressList.findIndex(v => v.id === addressId)
            addressList.splice(index, 1)
            this.setData({
              addressList
            })
            // //获取当前的页面跳转栈
            // const pages = getCurrentPages();
            // //获取上一个页面的对象
            // const prevPage = pages[pages.length - 2];
            // //将上一个页面的数据进行变化
          } else {
            wx.showToast({ title: res.data.message, icon: "none" });
          }
        }
      }
    })
  },

  /**
   * 处理地址编辑事件
   */
  handlerEdit(e) {
    const addressId = e.currentTarget.dataset.id
    wx.navigateTo({
      url: `/pages/addAddress/addAddress?addressId=${addressId}`
    });
  },

  /**
   * 选择收件地址
   */
  chooseAddressInfo(e) {
    //获取用户选择的地址id
    const addressId = e.currentTarget.dataset.id
    const addressList = this.data.addressList
    //从地址列表中获取用户选择的数据
    const address = addressList.find(v => v.id === addressId)
    //获取当前的页面跳转栈
    const pages = getCurrentPages();
    //获取上一个页面的对象
    const prevPage = pages[pages.length - 2];
    //设置上一个页面的参数
    prevPage.setData({
      address
    });
    //跳回到上一个页面
    wx.navigateBack({
      delta: 1
    })
  },

  /**
   * 处理跳转到当前页面的方式
   */
  handlerJumpType() {
    const app = getApp()
    const addressIndex = app.globalData.addressIndex
    this.setData({
      addressIndex
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.loadAddressList()
    this.handlerJumpType()
  },

  /**
   * 页面相关事件处理函数--监听用户上拉动作
   */
  onReachBottom() {
    this.loadAddressList()
  }
})